package MyOs;
import queue.*;
import MyOs.*;
public class PcbQueue {
private linkqueue guide;//指向实际可供操作的Pcb队列

public  PcbQueue() {
     guide=ProcessManager.getOperationQueue();
    }

    // 加入一个进程到运行队列
 public void add2Running(Pcb process) {
          int i=process.getPid();
          guide.choose(i).setRunning();

    }

    // 从运行队列中取出一个Process
 public  Pcb removeFromRunning(int pid) {
       Pcb pb=guide.choose(pid);
       if(pb.getStatus()!=Status.RUNNING)
           throw new IllegalArgumentException("pid为"+pid+"的进程的状态不是RUNNING");
       else
           return guide.delete(pid);
    }

    // 加入一个Process到就绪队列
  public   void add2Ready(Pcb process) {
          int i=process.getPid();
          guide.choose(i).setReady();

    }

    // 从就绪队列中取出一个
 public    Pcb removeFromReady(int pid) {
        Pcb pb=guide.choose(pid);
       if(pb.getStatus()!=Status.READY)
           throw new IllegalArgumentException("pid为"+pid+"的进程的状态不是READY");
       else
           return guide.delete(pid);
    }

    // 加入到等待队列
  public   void add2Waiting(Pcb process) {
          int i=process.getPid();
          guide.choose(i).setWaiting();
    }

    // 从等待队列中取出一个
  public   Pcb removeFromWaiting(int pid) {
       Pcb pb=guide.choose(pid);
       if(pb.getStatus()!=Status.WAITING)
           throw new IllegalArgumentException("pid为"+pid+"的进程的状态不是WAITING");
       else
           return guide.delete(pid);
    }

    // 通过pid获得这个进程
   public  Pcb getPcb(int pid) {
          Pcb pb=guide.choose(pid);
          return pb;
    }

    // 根据pid，删除这个pcb
   public  Pcb removePcb(int pid) {
        guide.choose(pid);
        return guide.delete(pid);
    }
    public void show(){
            while(!guide.isEmpty()){
            System.out.println(" "+guide.getFront().getPid()+" "+guide.getFront().getName()+" "+guide.getFront().getStatus());
            guide.deQueue();
        }
    }
}
